<?php
/**
 * 类名
 * @Author   Wcj
 * @DateTime 2019/3/15 16:54
 */

// 开始时间
$startTime = microtime(true);

// 进程池
$workers = [];

$urls = [
    'https://tool.lu/timestamp/',
    'https://fanyi.baidu.com/?aldtype=16047#auto/zh',
    'https://www.baidu.com/?tn=98050039_dg&ch=1',
    'https://www.9fpuhui.com/',
    'http://www.xinhuanet.com/politics/leaders/2019-03/15/c_1124240041.htm',
    'http://www.xinhuanet.com/politics/leaders/xijinping/index.htm',
    'http://www.xinhuanet.com/politics/leaders/2019-03/08/c_1124211285.htm',
    'https://tieba.baidu.com/index.html',
    'http://image.baidu.com/',
    'https://wenku.baidu.com/',
];


//oneProcess($urls, $startTime); // 调用单进程
moreProcess($urls, $startTime); // 调用多进程


/**
 * 模拟请求耗时1秒
 * @Author   Wcj
 * @DateTime 2019/3/15 17:04
 * @param $url
 * @return string
 */
function curlData($url)
{
//    return file_get_contents($url);
    sleep(1);
    return $url . 'success' . PHP_EOL;
}

/**
 * 计算耗时函数
 * @Author   Wcj
 * @DateTime 2019/3/15 17:23
 * @param $startTime
 */
function usedTime($startTime)
{
    // 结束时间
    echo '用时：' . (microtime(true) - $startTime);
}

/**
 * 单进程
 * @Author   Wcj
 * @DateTime 2019/3/15 17:22
 */
function oneProcess($urls, $startTime)
{
    foreach ($urls as $url) {
        echo curlData($url);
    }

    usedTime($startTime);
}

/**
 * 多进程
 * @Author   Wcj
 * @DateTime 2019/3/15 17:24
 * @param $urls
 * @param $startTime
 */
function moreProcess($urls, $startTime)
{
    for ($i = 0; $i < 10; $i++) {
        // 创建子进程
        $process = new swoole_process(function (swoole_process $worker) use ($urls, $i) {
            $ret = curlData($urls[$i]); // 调用请求
            $worker->write(print_r($ret, true)); // 写入响应数据
        }, true);

        // 启动进程
        $pid = $process->start();

        // 装入进程池
        $workers[$pid] = $process;
    }

    foreach ($workers as $pro) {
        echo $pro->read(); // 读取管道数据
    }

    usedTime($startTime);
}